package com.buaa.divinationmaster.core.constants;

/**
 * 占卜类型枚举
 * 定义应用支持的所有占卜方式
 */
public enum DivinationType {
    
    /**
     * 塔罗牌占卜
     */
    TAROT("tarot", "塔罗牌", "Tarot Cards"),
    
    /**
     * 梅花易数占卜
     */
    PLUM_BLOSSOM("plumblossom", "梅花易数", "Plum Blossom Numerology"),
    
    /**
     * 金钱卦占卜
     */
    COIN_ORACLE("coinoracle", "金钱卦", "Coin Oracle"),
    
    /**
     * 雷诺曼卡牌占卜
     */
    LENORMAND("lenormand", "雷诺曼", "Lenormand Cards");
    
    private final String code;
    private final String displayNameZh;
    private final String displayNameEn;
    
    DivinationType(String code, String displayNameZh, String displayNameEn) {
        this.code = code;
        this.displayNameZh = displayNameZh;
        this.displayNameEn = displayNameEn;
    }
    
    public String getCode() {
        return code;
    }
    
    public String getDisplayNameZh() {
        return displayNameZh;
    }
    
    public String getDisplayNameEn() {
        return displayNameEn;
    }
    
    /**
     * 根据代码获取占卜类型
     * @param code 类型代码
     * @return 占卜类型枚举，如果未找到则返回null
     */
    public static DivinationType fromCode(String code) {
        if (code == null) return null;
        
        for (DivinationType type : values()) {
            if (type.code.equalsIgnoreCase(code)) {
                return type;
            }
        }
        return null;
    }
    
    /**
     * 根据中文显示名获取占卜类型
     * @param displayName 中文显示名
     * @return 占卜类型枚举，如果未找到则返回null
     */
    public static DivinationType fromDisplayNameZh(String displayName) {
        if (displayName == null) return null;
        
        for (DivinationType type : values()) {
            if (type.displayNameZh.equals(displayName)) {
                return type;
            }
        }
        return null;
    }
    
    @Override
    public String toString() {
        return displayNameZh;
    }
}
